package com.ce.framework.datamaintain.dao;

import java.io.File;
import java.util.Collection;
import java.util.List;

import org.apache.poi2.hssf.usermodel.HSSFWorkbook;
import org.springframework.dao.DataAccessException;

import com.ce.framework.datamaintain.logic.ISQLMapper;
import com.ce.framework.datamaintain.logic.ISearchCondition;
import com.ce.framework.datamaintain.logic.ISearchInfo;
import com.ce.framework.datamaintain.logic.SQLSearchCondition;
import com.ce.framework.exception.AppException;
import com.ce.framework.exception.DaoException;


/**
 * 嫦娥软件有限公司 版权所有 2013
 * 创建人： andy
 * 创建时间： Jul 7, 2010 1:24:38 PM
 * 功能描述：基础DAO层接口类
 * ==================================
 * 修改历史
 * 修改人        修改时间      修改位置（函数名）
 *
 * ==================================
 */
public interface IBaseDao {


	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:07:49 AM
	 * 功能描述：实现对数据的逻辑删除
	 * 方法的参数和返回值
	 * @param po  要删除的PO对象
	 * @param ids 删除对象的主键，字符串数组
	 * @param delField  标识删除的字段名称
	 * @param childPoName  要删除的子表po类名称
	 * @return
	 * @throws AppException
	 * int 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public int deleteLogic(String poClassName, String[] ids, String delField,String childPoName)
			throws AppException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:07:53 AM
	 * 功能描述： 实现对数据的添加
	 * 方法的参数和返回值
	 * @param po
	 * @throws AppException
	 * @throws DataAccessException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void addPo(Object po) throws AppException, DataAccessException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:07:55 AM
	 * 功能描述：实现对数据的更新
	 * 方法的参数和返回值
	 * @param po
	 * @throws AppException
	 * @throws DataAccessException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void updatePo(Object po) throws AppException, DataAccessException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:07:59 AM
	 * 功能描述：更新多个po对象
	 * 方法的参数和返回值
	 * @param pos
	 * @throws AppException
	 * @throws DataAccessException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void updatePos(Collection<?> pos) throws AppException,
			DataAccessException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:08:01 AM
	 * 功能描述：物理删除多条数据
	 * 方法的参数和返回值
	 * @param delList
	 * @throws AppException
	 * @throws DataAccessException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void deletePos(List<?> delList) throws AppException,
			DataAccessException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:08:04 AM
	 * 功能描述：根据po名称及主键获取po对象
	 * 方法的参数和返回值
	 * @param poClassName  po名称
	 * @param selectedId  主键
	 * @return
	 * @throws AppException
	 * @throws DataAccessException
	 * Object 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public Object getPo(String poClassName, String selectedId)
			throws AppException, DataAccessException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:08:07 AM
	 * 功能描述： 删除根据HQL语句获取的数据（物理删除）
	 * 方法的参数和返回值
	 * @param hql
	 * @throws AppException
	 * @throws DataAccessException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void deleteSearchHQL(String hql) throws AppException,
			DataAccessException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:08:09 AM
	 * 功能描述： 根据查询条件获取数据列表
	 * 方法的参数和返回值
	 * @param searchInfo
	 * @return
	 * @throws AppException
	 * @throws DataAccessException
	 * List 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public List<?> search(ISearchInfo searchInfo) throws AppException,
			DataAccessException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:08:12 AM
	 * 功能描述：根据查询条件获取数据列表
	 * 方法的参数和返回值
	 * @param searchCondition
	 * @return
	 * @throws AppException
	 * @throws DataAccessException
	 * List 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public List<?> search(ISearchCondition searchCondition) throws AppException,
			DataAccessException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:08:14 AM
	 * 功能描述： 获取分页信息
	 * 方法的参数和返回值
	 * @param searchInfo
	 * @return
	 * @throws AppException
	 * @throws DataAccessException
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void getDivideResultInfo(ISearchInfo searchInfo)
			throws AppException, DataAccessException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:08:17 AM
	 * 功能描述： 获取记录总数
	 * 方法的参数和返回值
	 * @param sqlFromWhere
	 * @return
	 * @throws AppException
	 * @throws DataAccessException
	 * int 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public int getRecordCount(SQLSearchCondition condition) throws AppException,
			DataAccessException;
	
	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:08:20 AM
	 * 功能描述： 批量增加po对象
	 * 方法的参数和返回值
	 * @param pos
	 * @throws AppException
	 * @throws DataAccessException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void addPos(Collection<?> pos)throws AppException, DataAccessException;
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-9-11 上午10:44:27
	 * 功能描述：通过HQL语句获取相应的查询类表
	 * 方法的参数和返回值
	 * @param hql
	 * @return
	 * @throws DaoException
	 * List 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public List<?> findByHql(final String hql) throws DaoException ;
	public List<?> findByHql(final String hql,Object[] params) throws DaoException ;
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-9-16 上午09:16:08
	 * 功能描述：根据sql语句获取List对象
	 * 方法的参数和返回值
	 * @param searchInfo
	 * @param mapper
	 * @return
	 * List 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 * @throws AppException 
	 */
	public List<?> queryData(ISearchInfo searchInfo, ISQLMapper mapper) throws AppException;
	
	public List<Object> queryData(ISearchCondition searchCndt, ISQLMapper mapper) throws AppException;

}
